//-----------------------------------------------------------------------------
// Map.js			:  Classe basique pour une map
//
//	Author : Pizzi 
//	Dcreat : 30/10/2012
//	Dmodif : 30/10/2012 23:00
//-----------------------------------------------------------------------------
/// <summary>
/// Une Simple Bombe
/// </summary>
(function (window) {

    //Attributs de la classe Map
    this.strXhr = new XMLHttpRequest();
    this.tabDecorMap = new Array();
    this.tabDecor = new Array(20);
    this.tabDecor[0] = new Array(20);
    this.tabDecor[1] = new Array(20);
    this.tabDecor[2] = new Array(20);
    this.tabDecor[3] = new Array(20);
    this.tabDecor[4] = new Array(20);
    this.tabDecor[5] = new Array(20);
    this.tabDecor[6] = new Array(20);
    this.tabDecor[7] = new Array(20);
    this.tabDecor[8] = new Array(20);
    this.tabDecor[9] = new Array(20);
    this.tabDecor[10] = new Array(20);
    this.tabDecor[11] = new Array(20);
    this.tabDecor[12] = new Array(20);
    this.tabDecor[13] = new Array(20);
    this.tabDecor[14] = new Array(20);
    this.tabDecor[15] = new Array(20);
    this.tabDecor[16] = new Array(20);
    this.tabDecor[17] = new Array(20);
    this.tabDecor[18] = new Array(20);
    this.tabDecor[19] = new Array(20);
    
    // -- Les constantes
    this.NBRCASELARGEUR = 19;
    this.NBRCASEHAUTEUR = 12;
    this.TAILLECASE = 50;
    // -- Enumération pour les décors
    var EnuDecors = 
	{
	      Vide : 0, 
	      Tronc : 1,
	      Arbre : 2,	 
	      Caisse : 3,   
	      Rock : 4,  
	      Lac : 5,
	      Stone : 6,
	      Cube : 7,
	}

    function Map(strBackground, strMap) {
    	AfficherBackground(strBackground);
        ChargerMap(strMap);
    }
    
    this.AfficherBackground = function(strBackground){
    	var imgBackground = new createjs.Bitmap(strBackground);
    	//On ajoute le background à la map
    	stage.addChild(imgMap);
    }

	this.ChargerMap = function(strMap){
    	strXhr.onreadystatechange = TraiterDonnees;
		strXhr.open("GET", strMap, true);
		strXhr.send(null);
   }
   
   this.TraiterDonnees = function(){
   		if (strXhr.readyState == 4 && (strXhr.status == 200 || strXhr.status == 0)) {
			this.tabDecorMap = eval('(' + strXhr.responseText + ')');
			MettreDecor(this.tabDecorMap);
			MettreDecorAleatoire();
		}
		else{
			//alert("Impossible de charger la map " + strXhr + "...");
		}
   }
   
   this.MettreDecor = function(pTabDecor){
   		// --On parcourt toutes les occurrences des décors du ficher .json pour les installer sur la map
   		for (var i = 0; i <= pTabDecor.decors.length - 1; i++)
   		{
   			AjouterDecor(pTabDecor.decors[i].type, new createjs.Point(pTabDecor.decors[i].positionX * 50, pTabDecor.decors[i].positionY * 50));
   			for (var j = 0; j < pTabDecor.decors[i].tailleX; j++)
   			{
   				for (var k = 0; k < pTabDecor.decors[i].tailleY; k++)
   				{
   					var x = parseInt(pTabDecor.decors[i].positionX) + j;
   					var y = parseInt(pTabDecor.decors[i].positionY) + k;
   					this.tabDecor[x][y] = pTabDecor.decors[i].type;
   				}
   			}
   		}
   }
   
   this.MettreDecorAleatoire = function(){
   		for (var i = 0; i < this.NBRCASEHAUTEUR; i++)
   		{
   			//alert(i);
   			//alert(this.tabDecor[i]);
   			for (var j = 0; j < this.NBRCASELARGEUR; j++)
   			{
   				//Si une zone n'a pas été défini, on l'a définie aléatoirement
   				if (this.tabDecor[j][i] == undefined)
   				{
   					//On vérifie si on a une place pour un décor de 2 de largeur	
   					if (j == 18){ ChoisirTypeDecor(false, new createjs.Point(j * 50,i * 50));}
   					else if (this.tabDecor[j + 1][i] == undefined){ ChoisirTypeDecor(true, new createjs.Point(j * 50,i * 50));}
   					//ou juste pour un décor d'une largeur
   					else{ ChoisirTypeDecor(false, new createjs.Point(j * 50,i * 50));}
   				}
   			}
   		}
   }
   
   this.ChoisirTypeDecor = function(pBolLargeur, pptnPosition){
		var typeDecor = -1;
		var random;
		if (pBolLargeur == false){random = Math.floor((Math.random()*6)+1);}
		else {random = Math.floor((Math.random()*10)+1);}
		switch (random)
		{
			case 1 : typeDecor = 0; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 2 : typeDecor = 0; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 3 : typeDecor = 0; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 4 : typeDecor = 1; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 5 : typeDecor = 1; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 6 :  typeDecor = 2; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; break;
			case 7 :  typeDecor = 3; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; this.tabDecor[pptnPosition.x/50 + 1][pptnPosition.y/50] = typeDecor; break;
			case 8 :  typeDecor = 3; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; this.tabDecor[pptnPosition.x/50 + 1][pptnPosition.y/50] = typeDecor; break;
			case 9 :  typeDecor = 3; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; this.tabDecor[pptnPosition.x/50 + 1][pptnPosition.y/50] = typeDecor; break;
			case 10: typeDecor = 4; this.tabDecor[pptnPosition.x/50][pptnPosition.y/50] = typeDecor; this.tabDecor[pptnPosition.x/50 + 1][pptnPosition.y/50] = typeDecor; break; 
		}
		AjouterDecor(typeDecor, pptnPosition);
   }
   
   this.AjouterDecor = function(pintTypeDecor, pptnPosition){
   		// -- Selon le type de décor, on dessine tel ou tel image
   		if (pintTypeDecor == EnuDecors.Tronc){new Decor(imgTronc, new createjs.Point(pptnPosition.x,pptnPosition.y - 35), new createjs.Point(100,150), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Caisse){new Decor(sprCaisse, new createjs.Point(pptnPosition.x - 75,pptnPosition.y - 140), new createjs.Point(250,250), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Arbre){new Decor(imgArbre, new createjs.Point(pptnPosition.x - 50,pptnPosition.y - 125), new createjs.Point(150,250), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Rock){new Decor(imgRock, new createjs.Point(pptnPosition.x + 10,pptnPosition.y - 30), new createjs.Point(150,150), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Lac){new Decor(imgLake, new createjs.Point(pptnPosition.x,pptnPosition.y), new createjs.Point(150,100), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Stone){new Decor(imgStone, new createjs.Point(pptnPosition.x,pptnPosition.y), new createjs.Point(200,150), new XNARectangle(0,100,50,50), true, false);}
   		if (pintTypeDecor == EnuDecors.Cube){new Decor(imgCubeRock, new createjs.Point(pptnPosition.x - 10,pptnPosition.y - 70), new createjs.Point(200,200), new XNARectangle(0,100,50,50), true, false);}	
   }

    window.Map = Map;
}(window));